package com.wwz.leetcode;

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;
/**
 * @description: 有效的括号
 * @author: Sailor
 * @date: 2023-12-25 14:35:29
 */
public class LeetCode20_1 {
    @Test
    public void test() {
        // isValid("()[]{}");
        System.out.println(isValid("\"){\""));
    }

    // 思路是一个栈 有左括号进来了 才能有对应右括号 并进行弹出
    public boolean isValid(String s) {
        if (s.length() % 2 != 0) {
            return false;
        }
        List<String> list = new ArrayList<>();
        for (int i = 0; i < s.length(); i++) {
            if (list.size() == 0 && (String.valueOf(s.charAt(i)).equals(")") || String.valueOf(s.charAt(i)).equals("}") || String.valueOf(s.charAt(i)).equals("]"))) {
                return false;
            }
            if (String.valueOf(s.charAt(i)).equals("(") || "[".equals(String.valueOf(s.charAt(i))) || "{".equals(String.valueOf(s.charAt(i)))) {
                list.add(String.valueOf(s.charAt(i)));
                continue;
            }
            if (String.valueOf(s.charAt(i)).equals(")") && !list.get(list.size() - 1).equals("(")) {
                return false;
            } else if (String.valueOf(s.charAt(i)).equals(")") && list.get(list.size() - 1).equals("(")) {
                list.remove(list.size() - 1);
                continue;
            }
            if (String.valueOf(s.charAt(i)).equals("}") && !list.get(list.size() - 1).equals("{")) {
                return false;
            } else if (String.valueOf(s.charAt(i)).equals("}") && list.get(list.size() - 1).equals("{")) {
                list.remove(list.size() - 1);
                continue;
            }
            if (String.valueOf(s.charAt(i)).equals("]") && list.get(list.size() - 1).equals("]")) {
                return false;
            } else if (String.valueOf(s.charAt(i)).equals("]") && list.get(list.size() - 1).equals("[")) {
                list.remove(list.size() - 1);
                continue;
            }
        }
        if (list.size() > 0) {
            return false;
        }
        return true;
    }
}
